#ifndef TERMINAL512_H
#define TERMINAL512_H

using namespace std;

#include <string>
#include <iostream>
#include "tipos.h"

//#include "chofer.h"
//include "interno.h"
//#include "Conj.h"
//#include "cola.h"
//#include "coleconviaje.h"
//#include "Dicc.h"
//#include "conjAc.h"
//#include "iterconj.h"
//#include "itercola.h"
class Terminal {
	public:
	// generadores
	Terminal(int cantDarsenas, const ConjInterno &ConjI, const ConjChofer &ConjC);

	Terminal& saleInterno();
	Terminal& llegaInterno(IdInterno, int nroDarsena);

	// observadores
	int cantDarsenas() const;
	bool esInterno(IdInterno) const;
	const Interno elInterno(IdInterno) const;
	bool esChofer(IdChofer) const;
	const Chofer elChofer(IdChofer) const;
	int internosEnDarsena(int nroDarsena) const;
	IdInterno internoEnPosicion(int nroDarsena, int posicion) const;
	IdChofer quienManeja(IdInterno) ;//const;
	bool esperandoChofer() const;
	int cantViajesInterno(IdInterno) const;
	bool viajando(IdInterno) const;

	// destructor
	~Terminal();

	private:
		int cantdarsenas;
		bool estaTrabado;
		Dicc<colectivoConViajes,Chofer> ColectivosViajando;
		conjAc<Chofer> ChoferesEsperandoViejos;
		conjAc <Chofer> ChoferesEsperandoJovenes;

		Cola <colectivoConViajes>* darsenas;
		Chofer DameUnChofer(void);
		bool AlgunoEnDarsena(void)const;

		bool validaConstructor(int cantDarsenas, const Conj<Interno> &inter, const Conj<Chofer> &chof);



};

#endif
